home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / MAC / THINKC / 3_0 / OIC_1 / OIC_SOUR / CLASS.C next >
Text File  |  1989-03-05  |  2KB  |  112 lines

  1. /*
  2.  *        Class - the class class; the default meta-class.
  3.  *
  4.  *            Copyright ⌐ John Wainwright 1988
  5.  *
  6.  *    Supers : None.
  7.  *
  8.  *    Class Vars : None
  9.  *
  10.  *    Class Methods : None
  11.  *
  12.  *    Methods :
  13.  *
  14.  *        print            - prints the class name
  15.  *        supers            - list of all the supers for this class.
  16.  *        subs            - list of all the sub-classes for this class.
  17.  */
  18.  
  19. #include "oic.h"
  20. #include "generics.h"
  21.  
  22. class     Class;                        /* Class class                         */
  23. class    classes;                    /* list of all classes                */
  24.  
  25. /* -------------------- Class Instance methods ---------------------------- */
  26.  
  27. method list
  28. get_supers(list, class)
  29.     list    list;
  30.     class    class;
  31. {
  32.     register classlist *cl;
  33.  
  34.     for (cl = class->c_superclasses; cl != END; cl = cl->cl_next)
  35.     {
  36.         if (class != cl->cl_class)
  37.             push(list, cl->cl_class);
  38.         get_supers(list, cl->cl_class);
  39.     }
  40.             
  41.     return list;
  42. }
  43.         
  44. method object
  45. _supers(self)
  46.     register class    self;
  47. {
  48.     return get_supers(New(List, END), self);
  49. }
  50.  
  51. method object
  52. _subs(self)
  53.     class    self;
  54. {
  55.     register object        list;
  56.     register class        o;
  57.  
  58.     list = New(List, END);
  59.     for (o = classes; o != END; o = o->c_next)
  60.         if (o != self && SubClassOf(o, self))
  61.             push(list, o);
  62.         
  63.     return list;
  64. }
  65.  
  66. method object
  67. _cantDo(self, dummy, ap)
  68.     class        self;
  69.     char        *dummy;
  70.     struct 
  71.     {
  72.         GenericTable    *gen;
  73.         char            *args;
  74.     } *ap;
  75. {
  76.     gprintf(screen, "** No \"%s\" class method for %s\n", GenericName(ap->gen), self->c_name);
  77.     return END;
  78. }
  79.  
  80. method
  81. _print(self)
  82.     class    self;
  83. {
  84.     gprintf(screen, "%s\n", self->c_name);
  85. }
  86.  
  87. method object
  88. _repList(self)
  89.     class    self;
  90. {
  91.     return New(String, self->c_name);
  92. }
  93.  
  94. /* ------------------- Init the Class class ------------------------------- */
  95.  
  96. /*        
  97.  *        note that Class has already been made - the ONLY function
  98.  *        that should call this function is InitRootClasses in obj.c
  99.  */
  100.  
  101. InitClass()
  102. {
  103.     AddMethods(Class,
  104.                     supersGeneric,         _supers,
  105.                     subsGeneric,        _subs,
  106.                     cantDoGeneric,        _cantDo,
  107.                     printGeneric,        _print,
  108.                     repListGeneric,        _repList,
  109.                     END);
  110. }
  111.  
  112.